<?php

//
// Функция загрузки конфигурационного файла модуля
//
function load_module_config($name)
{
	// Определяем адрес файла
	$filename = $_SERVER['DOCUMENT_ROOT'].'/modules/'.$name.'/config.php';
	
	// Проверяем существует
	if  (!file_exists($filename))
		error_404 ();
		
	// Загружаем файл конфигурации
	include_once $filename;
	
	// Проверям формат файла
	if ( !isset($MODULE) OR !is_array($MODULE))
		exit('Неверный формат файла настройки модуля '.$name.'!');

	return $MODULE;
}

//
// Функция сохранения конфигурационного файла
//
function save_config($name, $MODULE, $MNAME)
{
  // Определяем адрес файла
	$filename = $_SERVER['DOCUMENT_ROOT'].$name;
	
	// Проверяем существует
	if  (!file_exists($filename))
	//	error_404 ();
		
	// Проверям формат данных
	if ( !isset($MODULE) OR !is_array($MODULE))
		exit('Неверный формат!'.print_r($MODULE));

	// Проверяем возможность записи
	if (is_writable($filename)) 
	{
		if (!$handle = fopen($filename, 'w+')) 
		{
			exit("Не могу открыть файл ($filename)");
		}
		
		$content = '<?php'."\n".' $'.$MNAME.' = '.var_export($MODULE,TRUE)."\n?>";
			
		if (fwrite($handle, $content) === FALSE) 
		{
		    exit("Не могу произвести запись в файл ($filename)");
		}
		
		fclose($handle);

	} 
	else 
	{
    	exit("Файл $filename недоступен для записи");
	}
	

	return $MODULE;
}

//
// Функция загрузки представления
//
function load_module_view($module, $view, $args = array(), $as_string = FALSE )
{
	// Определяем адрес файла
	$filename = $_SERVER['DOCUMENT_ROOT'].'/modules/'.$module.'/views/'.$view.'.php';
	
	// Проверяем существует
	if  (!file_exists($filename))
		site_error ('Файл представления не найден.');
	
	// Конвертируем переданый массив в нужный формат
	extract ($args);
	
	// Если нужно вернуть представление ввиде строки
	if ($as_string)
	{
		// Начинаем буферизованный вывод
		ob_start();
	}
	
	// Загружаем файл представления
	if ((bool) @ini_get('short_open_tag') === FALSE AND config_item('rewrite_short_tags') == TRUE)
	{
		echo eval('?>' . preg_replace("/;*\s*\?>/", "; ?>", 
      str_replace('<?=', '<?php echo ', 
      file_get_contents($filename))).'<?php ');
	}
	else
	{
		include($filename);
	}
	
	// Если нужно вернуть представление ввиде строки
	if ($as_string)
	{
		// Сохранеям результат и закрываем буфер
		$output = ob_get_contents();
		ob_end_clean();
		
		// Возвращаем представление ввиде строки
		return $output;
	}
}

//
// Функция загрузки контроллера
//
function load_module_controller($module, $action, $ACTION)
{
	global $SITE, $LNG;

	$modulefile		= $_SERVER['DOCUMENT_ROOT'].'/modules/'.$module.'/controllers/'.$action.'.php';
	$functionfile	= $_SERVER['DOCUMENT_ROOT'].'/modules/'.$module.'/functions.php';
	$langfilename	= $_SERVER['DOCUMENT_ROOT'].'/modules/'.$module.'/languages/'.$SITE['site_lang'].'.php';

	// Подключаем файлы модулей подходящих по условию
	if ($ACTION['enabled']) 
	{
		// Проверяем возможность обращения к модулю пользователя
		if (
			$ACTION['group'] == 'all' ||
			($ACTION['group'] == 'register' && is_registered()) ||
			($ACTION['group'] == 'moderator' &&  ( is_moderator() || is_admin()) ) || 
			($ACTION['group'] == 'admin' && is_admin())
			)
		{
			if (file_exists($modulefile)) 
			{
				// Если существует файл общих функций для модуля
				if ( file_exists($functionfile) ) include $functionfile;
				// Если существует языковой файл
				if ( file_exists($langfilename) ) include $langfilename;
				
				// Загружаем котроллер
				require_once $modulefile;
			}
			else 
				site_error ('Файл модуля не найден.');
		}
	}
	else
		site_error ('Контроллер недоступен.');

}

function load_module_ajax($module, $ajax, $AJAX)
{
	global $SITE, $LNG;
		
	$filename		= $_SERVER['DOCUMENT_ROOT'].'/modules/'.$module.'/ajax/ajax_'.$ajax.'.php';
	$langfilename	= $_SERVER['DOCUMENT_ROOT'].'/modules/'.$module.'/languages/'.$SITE['site_lang'].'.php';	

	// Подключаем файлы модулей подходящих по условию
	if ($AJAX['enabled']) 
	{
		// Проверяем возможность обращения к модулю пользователя
		if (
			$AJAX['group'] == 'all' ||
			($AJAX['group'] == 'register' && is_registered()) ||
			($AJAX['group'] == 'moderator' &&  (is_moderator() || is_admin())) || 
			($AJAX['group'] == 'admin' && is_admin())
			)
		{
			if (file_exists($filename)) 
			{
				// Если существует языковой файл
				if ( file_exists($langfilename) ) include $langfilename;

				// Загружаем котроллер
				require_once $filename;
			}
			else 
				site_error ('Файл контроллера не найден.'.$filename);
		}
	}
	else
		site_error ('Контроллер недоступен.');

}

function load_helper ($helper)
{
	$filename = $_SERVER['DOCUMENT_ROOT'].'/modules/system/helpers/'.$helper.'_helper.php';
	if (file_exists($filename)) 
	{
		include_once $filename;
	}
	else
		site_error ('Файл помощника не найден.');

}

function send_mail ($to, $subject, $message) 
{
	global $SITE;
	// add headers for utf-8 message
	$headers = "From: ".$SITE['site_name']." <".$SITE['site_email'].">\r\n";
	$headers .= "MIME-Version: 1.0\r\n";
	$headers .= "Content-type: text/html; charset=utf-8\r\n";
	$headers .= "Content-Transfer-Encoding: 8bit\r\n";

	return(@mail ("$to", "$subject", "$message", "$headers"));
}


function myErrorHandler($errno, $errmsg, $filename, $linenum, $vars) {
	global $SITE;
	
    $errortype = array (
                1		=> 'Error',
                2		=> 'Warning',
                4		=> 'Parsing Error',
                8		=> 'Notice',
                16      => 'Core Error',
                32    	=> 'Core Warning',
                64   	=> 'Compile Error',
                128		=> 'Compile Warning',
                256		=> 'User Error',
                512		=> 'User Warning',
                1024	=> 'User Notice',
                2047	=> 'All',
                2048	=> 'Runtime Notice'
                );
	$user_errors = array(E_USER_ERROR, E_USER_WARNING, E_USER_NOTICE);


	$dt = date('Y-m-d H:i:s');
	$myip=getenv('REMOTE_ADDR');
	$err = '
		<error>
			<date>' . $dt . '</date>
			<ip>' . $myip . '</ip>
			<errno>' . $errno . '</errno>
			<type>' . $errortype[$errno] . '</type>
			<msg>' . $errmsg . '</msg>
			<script>' . $filename . '</script>
			<line>' . $linenum . '</line>
		</error>';
	
	if ($errno != 8 && $errno != 2048) 
	{
		log_error($err);
		error_500 ();
	}

}

function log_error($message) 
{
	global $SITE;

    $f=fopen($_SERVER['DOCUMENT_ROOT'].'/modules/system/logs/error.log','a+');
    fwrite($f, $message);
    fclose($f);
	
	send_mail($SITE['site_email'], 'Ошибка на портале '.$SITE['site_name'], 'Error Log: ' . $_SERVER['HTTP_HOST']. $message);
}

function error_404 () 
{
	header ('HTTP/1.0 404 Not Found');
	ob_end_clean ();
	include $_SERVER['DOCUMENT_ROOT'].'/modules/system/errors/404.html';
	exit;
}

function error_403 () 
{
	header ('HTTP/1.0 403 Forbidden');
	ob_end_clean ();
	include $_SERVER['DOCUMENT_ROOT'].'/modules/system/errors/403.html';
	exit;
}

function error_500 () 
{
	header ('HTTP/1.0 500 Integral Server Error');
	ob_end_clean ();
	include $_SERVER['DOCUMENT_ROOT'].'/modules/system/errors/500.html';
	exit;
}
?>
